/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DTO.QuanDTO;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author HuuTri
 * Lớp cung cấp các hàm thao tác với dữ liệu
 */
public class QuanDAO{
    static String PROC_MAQUAN_EXIST = "spQuanCheckMaQuan";
    static String PROC_GET_MAQUAN_LIST = "spQuanGetAllMaQuan";
    static String PROC_INSERT = "spQuanInsert";
    static String PROC_DELETE = "spQuanDelete";
    static String PROC_UPDATE = "spQuanUpdate";
    static String PROC_SELECT_ALL = "spQuanGetAll";
    
    /**
     * Lấy danh sách mã quận
     * @return 
     */
    public static List<String> getListMaQuan() {
        List<String> listData = new ArrayList<>();
        DefaultTableModel model = SQLHelperDAO.execQuery(PROC_GET_MAQUAN_LIST, null);
        int row = model.getRowCount();
        
        for (int i = 0; i < row; i++) {
            listData.add(model.getValueAt(i,0).toString());
        }
        
        return listData;              
    }
    
    /**
     * Kiểm tra tính đúng đắn của mã quận
     * @param maquan
     * @return 
     */
    public static boolean checkExistMaQuan(int id, String maquan, String matinh) {
        QuanDTO quan = new QuanDTO();
        boolean res = false;       
        quan.setMaQuan(maquan);
        quan.setMaTinh(matinh);
        quan.setId(id);
        
        try {
            DefaultTableModel tableModel = SQLHelperDAO.execQuery(
                    PROC_MAQUAN_EXIST, 
                    getParamList(quan));
            if (tableModel.getRowCount() <= 0) {
                res = true;
            }
        } catch(Exception ex) {
            res = false;
        }
        return res;
    }
    
    public static boolean insert(QuanDTO quan) {
        boolean res = true;
        
        try {
            // insert quận mới
            SQLHelperDAO.execNonQuery(PROC_INSERT, getParamList(quan));
            MaSoDAO.updateMaSo(QuanDTO.TABLE_NAME);
        } catch (Exception ex) {
            res = false;
        } 
        
        // Trả về giá trị true nếu thực hiện thành công, false nếu thực hiện thất bại
        return res; 
    }
    
    /*Xóa thông tin của quận dựa vào mã số quận*/
    public static boolean delete(QuanDTO quan) {
        boolean res = true;
        
        try {
            SQLHelperDAO.execNonQuery(PROC_DELETE, getParamList(quan));
        } catch (Exception ex) {
            res = false;
        }
        
        return res;
    }
    
    /*Cập nhật thông tin dựa vào mã quận*/
    public static boolean update(QuanDTO quan){
        boolean res = true;
        
        try {
            SQLHelperDAO.execNonQuery(PROC_UPDATE, getParamList(quan));
        } catch(Exception ex) {
            res = false;
        }
        
        return res;
    }
    
    /*Lấy toàn bộ thông tin quận*/
    public static DefaultTableModel getTableModel() {
        return SQLHelperDAO.execQuery(PROC_SELECT_ALL, null);
    }
    
    /*Tạo danh sách tham số từ đối tượng QuanDTO*/
    private static  List<Parameter> getParamList(QuanDTO quan) {
        List<Parameter> listParams = new ArrayList<>();
        
        // Chèn các phần tử vào danh sách Parameters
        listParams.add(new Parameter(QuanDTO.ID, quan.getId()));
        listParams.add(new Parameter(QuanDTO.MA_QUAN, quan.getMaQuan()));
        listParams.add(new Parameter(QuanDTO.TEN_QUAN,quan.getTenQuan()));
        listParams.add(new Parameter(QuanDTO.SLDAILY_TOIDA, quan.getSLDaiLyToiDa()));
        listParams.add(new Parameter(QuanDTO.MA_TINH, quan.getMaTinh()));
        listParams.add(new Parameter(QuanDTO.MO_TA, quan.getMoTa()));
        
        return listParams;
    }
   
    /*Lấy danh sách các mã tỉnh và tên tỉnh*/
    public static List<String> getTinhList() {
        return Tinh_QuanDAO.getMaTinhList();
    }
    
    /*Lấy mã quận mới*/
    public static int getNewMaQuan() {
         return MaSoDAO.getMaSo(QuanDTO.TABLE_NAME);
    }
}
